package com.github.cakin.shiro.chapter21.service;

import com.github.cakin.shiro.chapter21.dao.UserRunAsDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @className: UserRunAsService
 * @description: 提供授予身份、回收身份、关系存在判断及查找 API
 * @date: 2020/5/29
 * @author: cakin
 */
@Service
public class UserRunAsServiceImpl implements UserRunAsService {
    /**
     * 注入userRunAsDao
     */
    @Autowired
    private UserRunAsDao userRunAsDao;

    /**
     * 功能描述：fromUserId（老板） 授权给 toUserId（秘书）
     *
     * @param fromUserId 授权者
     * @param toUserId   被授权者
     * @author cakin
     * @date 2020/5/29
     */
    public void grantRunAs(Long fromUserId, Long toUserId) {
        userRunAsDao.grantRunAs(fromUserId, toUserId);
    }

    /**
     * 功能描述：fromUserId（老板） 取消授权给 toUserId（秘书）
     *
     * @param fromUserId 授权者
     * @param toUserId   被授权者
     * @author cakin
     * @date 2020/5/29
     */
    public void revokeRunAs(Long fromUserId, Long toUserId) {
        userRunAsDao.revokeRunAs(fromUserId, toUserId);
    }

    /**
     * 功能描述：fromUserId（老板） 和 toUserId（秘书） 这条授权记录在表中是否存在
     *
     * @param fromUserId 授权者
     * @param toUserId   被授权者
     * @return boolean boolean
     * @author cakin
     * @date 2020/5/29
     */
    public boolean exists(Long fromUserId, Long toUserId) {
        return userRunAsDao.exists(fromUserId, toUserId);
    }

    /**
     * 功能描述：查看 哪些授权者（老板列表） 给 被授权者（秘书）授权
     *
     * @param toUserId 被授权者（秘书）
     * @return List<Long> 授权者列表（老板）
     * @author cakin
     * @date 2020/5/29
     */
    public List<Long> findFromUserIds(Long toUserId) {
        return userRunAsDao.findFromUserIds(toUserId);
    }

    /**
     * 功能描述：查看 授权者（老板） 给 哪些被授权者（秘书列表）授权
     *
     * @param fromUserId 授权者（老板）
     * @return List<Long> 被授权者列表（秘书）
     * @author cakin
     * @date 2020/5/29
     */
    public List<Long> findToUserIds(Long fromUserId) {
        return userRunAsDao.findToUserIds(fromUserId);
    }
}
